package com.qf.fmcommodity.websocket;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.sql.rowset.serial.SerialStruct;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;

@Component
@ServerEndpoint("/websocket/{oid}")
@Slf4j
public class WebSocketServer {

    //创建用于保存页面websoket连接对象的map对象
    public static ConcurrentHashMap<String, Session> map = new ConcurrentHashMap<String, Session>();

    /**
     * 提供一个外部调用的根据订单编号给对应页面发消息的方法
     */
    public static void sendMsg(String msg, String oid) throws IOException {

        Session session = map.get(oid);
        session.getBasicRemote().sendText(msg);

    }

    /**
     *当客户端发起websocket连接时，服务器端 要进行的逻辑处理 写在这个方法中
     */

    @OnOpen
    public void onOpen(Session session, @PathParam("oid") String oid) throws IOException {

        //直接给客户端发送一个消息
        session.getBasicRemote().sendText("from server:"+oid);

        map.put(oid,session);
    }

    /**
     * 当客户端消息到达时，服务器端如何进行处理
     */
    @OnMessage
    public void onMsg(Session session,String msg) throws IOException, InterruptedException {

        log.debug("收到客户端发来的消息:{}",msg);
//        session.getBasicRemote().sendText("from server:"+msg);
//        session.getBasicRemote().sendText("天青色等烟雨");
//        TimeUnit.SECONDS.sleep(1);
//        session.getBasicRemote().sendText("而我在等你");
//        TimeUnit.SECONDS.sleep(1);
//        session.getBasicRemote().sendText("炊烟袅袅升起");
//        TimeUnit.SECONDS.sleep(1);
//        session.getBasicRemote().sendText("隔江千万里");
    }

    /**
     * 当客户端关闭连接时，如何处理的代码写在这里
     */
    @OnClose
    public void onClose(Session session,@PathParam("oid") String oid){

        log.debug("客户端关闭连接了,oid={}",oid);
        map.remove(oid);

    }

    @OnError
    public void onError(Throwable throwable){

        log.debug("客户端连接出问题了",throwable);
    }

}
